﻿using System;
using System.Collections.Generic;
using System.Text;

namespace Exec
{
    // 사용자가 직접 관리 할수 있는 클래스
    public class Proc
    {
        private bool loop;

        private Manager mg;             // 플러그인 관리
        private Pool pool;

        public Proc()
        {
            pool = new Pool(3);
            mg = new Manager();

            Cycle();
        }

        // 콘솔 입력
        private void Cycle()
        {
            string comm;

            loop = true;
            
            while (loop)
            {
                comm = Console.ReadLine();

                switch (comm)
                {
                    case "add":
                        Console.Write("plugin location>> ");
                        mg.Add(Console.ReadLine());
                        break;
                    case "remove":
                        Console.Write("plugin location>> ");
                        mg.Remove(Console.ReadLine());
                        break;
                    case "clr":
                        Console.Clear();
                        break;
                    case "plugin":
                        mg.PrintPlugin();
                        break;
                    case "value":
                        Val.PrintValue();
                        break;
                    case "command":
                        Comm.PrintCommand();
                        break;
                    case "exit":
                        pool.Join();
                        loop = false;
                        break;
                    default:
                        Manager.Mediate(new Transaction(comm));
                        break;
                }
            }

            //System.Environment.Exit(0);
        }

        // 테스트용 메인
        static void Main()
        {
            new Proc();
        }

    }
}
